package junit;

import static org.junit.Assert.*;

import java.util.Date;

import org.junit.*;

import produto.Produto;
import produto.ProdutoPerecivel;
import stock.Existencia;
import cliente.Fornecedor;

public class ExistenciaTest {

	private static Existencia existencia;

	/**
	 * @throws java.lang.Exception
	 */
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		Produto p = new ProdutoPerecivel(48, 0.9, "Cola", "unid", null, null, null, null);
		Fornecedor f = new Fornecedor(24, "Xpto", null, null, null, null);
		existencia = new Existencia(512, p, f, 128, new Date(), 0.4);
	}

	/**
	 * @throws java.lang.Exception
	 */
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		existencia = null;
	}

	/**
	 * @throws java.lang.Exception
	 */
	@Before
	public void setUp() throws Exception {
        System.out.println("setUp()");
	}

	/**
	 * @throws java.lang.Exception
	 */
	@After
	public void tearDown() throws Exception {
        System.out.println("tearDown()");
	}

	/**
	 * Test method for {@link stock.Existencia#Existencia(int, produto.Produto, cliente.Fornecedor, double, java.util.Date, double)}.
	 */
	@Test
	public final void testExistenciaIntProdutoFornecedorDoubleDateDouble() {
		int id = 1;
		double q = 24, p = 1.6;
		Existencia e = new Existencia(id, null, null, q, null, p);
		assertNotNull(e);
		assertTrue(e.getId() == id);
		assertTrue(e.getQuantidade() == q);
		assertTrue(e.getPrecoCompra() == 1.6);
	}

	/**
	 * Test method for {@link stock.Existencia#Existencia(produto.Produto, cliente.Fornecedor, double, java.util.Date, double)}.
	 */
	@Test
	public final void testExistenciaProdutoFornecedorDoubleDateDouble() {
		double q = 24, p = 1.6;
		Existencia e = new Existencia(null, null, q, null, p);
		assertNotNull(e);
		assertTrue(e.getQuantidade() == q);
		assertTrue(e.getPrecoCompra() == 1.6);
	}

	/**
	 * Test method for {@link stock.Existencia#Existencia(produto.Produto, cliente.Fornecedor, double, double)}.
	 */
	@Test
	public final void testExistenciaProdutoFornecedorDoubleDouble() {
		double q = 24, p = 1.6;
		Existencia e = new Existencia(null, null, q, p);
		assertNotNull(e);
		assertTrue(e.getQuantidade() == q);
		assertTrue(e.getPrecoCompra() == p);
	}

	/**
	 * Test method for {@link stock.Existencia#Existencia(stock.Existencia)}.
	 */
	@Test
	public final void testExistenciaExistencia() {
		Existencia e = new Existencia(existencia);
		assertNotNull(e);
		assertEquals(e, e);
		assertTrue(e.equals(e));
	}

	/**
	 * Test method for {@link stock.Existencia#reduzir(double)}.
	 */
	@Test
	public final void testReduzir() {
		Existencia e = new Existencia(existencia);
		e.reduzir(20);
		assertTrue(e.getQuantidade() < existencia.getQuantidade());
	}

	/**
	 * Test method for {@link stock.Existencia#equals(java.lang.Object)}.
	 */
	@Test
	public final void testEqualsObject() {
		assertEquals(existencia, existencia);
		Existencia e = existencia;
		assertEquals(e, e);
		assertEquals(e, e);
		assertTrue(e.equals(e) && e.equals(e));
		e = new Existencia(existencia);
		assertEquals(e, existencia);
		assertEquals(existencia, e);
	}

	/**
	 * Test method for {@link stock.Existencia#getId()}.
	 */
	@Test
	public final void testGetId() {
		Existencia e = new Existencia (existencia);
		assertTrue(e.getId() == e.getId());
	}

	/**
	 * Test method for {@link stock.Existencia#getProduto()}.
	 */
	@Test
	public final void testGetProduto() {
		Existencia e = new Existencia(existencia);
		assertEquals(e.getProduto(), existencia.getProduto());
	}

	/**
	 * Test method for {@link stock.Existencia#getFornecedor()}.
	 */
	@Test
	public final void testGetFornecedor() {
		Existencia e = new Existencia(existencia);
		assertEquals(e.getFornecedor(), existencia.getFornecedor());
	}

	/**
	 * Test method for {@link stock.Existencia#getQuantidade()}.
	 */
	@Test
	public final void testGetQuantidade() {
		Existencia e = new Existencia(existencia);
		assertTrue(e.getQuantidade() == existencia.getQuantidade());
	}

	/**
	 * Test method for {@link stock.Existencia#getDataEntrada()}.
	 */
	@Test
	public final void testGetDataEntrada() {
		Existencia e = new Existencia(existencia);
		assertEquals(e.getDataEntrada(), existencia.getDataEntrada());
	}

	/**
	 * Test method for {@link stock.Existencia#getPrecoCompra()}.
	 */
	@Test
	public final void testGetPrecoCompra() {
		Existencia e = new Existencia(existencia);
		assertTrue(e.getPrecoCompra() == existencia.getPrecoCompra());
	}

	/**
	 * Test method for {@link stock.Existencia#getValuesToTable()}.
	 */
	@Test
	public final void testGetValuesToTable() {
		assertNotNull(existencia.getValuesToTable());
		assertTrue(existencia.getValuesToTable().length > 0);
	}

	/**
	 * Test method for {@link stock.Existencia#getListaParametros()}.
	 */
	@Test
	public final void testGetListaParametros() {
		assertNotNull(existencia.getListaParametros());
		assertTrue(existencia.getListaParametros().size() > 0);
	}

	/**
	 * Test method for {@link stock.Existencia#getListaValores()}.
	 */
	@Test
	public final void testGetListaValores() {
		assertNotNull(existencia.getListaValores());
		assertTrue(existencia.getListaValores().size() > 0);
	}

	/**
	 * Test method for {@link stock.Existencia#setId(int)}.
	 */
	@Test
	public final void testSetId() {
		Existencia e = new Existencia(existencia);
		assertEquals(e, existencia);
		e.setId(0);
		assertFalse(e.equals(existencia));
	}

}
